import axios from 'axios'
import store from '@/store'
import router from '@/router'
import { Toast } from 'vant'

// 不太合适！如果项目里面多个接口基准地址不同，这样配置就固定死了
// axios.defaults.baseURL = ""
// axios.create({配置对象})==> 创建一个新的axios实例对象
const baseURL = 'http://toutiao.itheima.net'
let request = axios.create({
  baseURL
})
// ===========请求拦截器=================
request.interceptors.request.use(config=>{
  // 一定要return config
  console.log("所有的请求都走这里...",config);
  // 如果你登录了，你就带上token！
  if(store.getters.token){
    config.headers.Authorization = 'Bearer '+store.getters.token
    // 需要携带token的接口才携带token，否则不携带
    // let authUrl = ['/userProfile']
    // if(authUrl.includes(config.url)){
    //   config.headers.Authorization = 'Bearer '+store.getters.token
    // }
  }
  return config
},error=>{
  return Promise.reject(error)
})

// ===========响应拦截器=================
request.interceptors.response.use(response=>{
  console.log("所有的响应结果都会走一下这里");
  // console.log(response)  是响应结果内容
  // 一定要return response
  return response
},async error=>{
  // 请求响应返回了错误走这里
  console.dir(error)
  if(error.response && error.response.status === 401){
    // token过期，过期的处理 // 思路： 那刷新头token去更新新的验证的token
    if(!store.getters.token) return 
    try {
      // let { data } = request({  // 不能使用request,还会走上面的 请求拦截器，从而导致有使用老失效token
        let { data } =await axios({
        url:baseURL+'/v1_0/authorizations',
        method:'put',
        headers:{
          Authorization:`Bearer ${store.state.user.refresh_token}`
        }
      })
      // 重新存储到仓库中和本地存储
      store.commit('setUser',{
        token:data.data.token,
        refresh_token:store.state.user.refresh_token
      })
      // 继续上一次的请求  error.config 是上次请求错误的是所有请求配置信息
      return request(error.config)
    } catch (err) {
      // 获取验证token失败，有可能是刷新token都失效了，那就要重新登录
      if(err && err.response.status == 500){
        Toast.fail('登录失效，请重新登录')
        store.commit('setUser',{})
        router.push('/login')
      }
      return Promise.reject(err)
    }
  }else{
    return Promise.reject(error)
  }
  
})

export default request